Software-defined networking (SDN) is a computer networking paradigm in which a centralized software-based controller, known as an SDN controller, manages and controls the various network devices (e.g., switches, routers, etc.) residing in a network. For example, the SDN controller can determine, via one or more applications running on the controller, rules for forwarding traffic flows within the network. The SDN controller can then install these rules (using, e.g., an SDN protocol such as OpenFlow) onto the network's switches and/or routers, thereby programming those devices to forward packets in accordance with the determined flows.
One task that may be performed by an SDN controller is host discovery—in other words, the act of automatically identifying all of the hosts (i.e., physical or virtual computer systems) that are connected to the network and how each host is connected. For instance, if hosts H1 and H2 are connected to network N, the host discovery process would involve determining the identities (e.g., network addresses) of H1 and H2, as well as the specific network devices and ports of network N to which H1 and H2 are coupled. This host information may be used by the applications running on the SDN controller to carry out their network services. The host information may also be used for other purposes, such as to provide network administrators a view of the overall network topology.
Unfortunately, existing approaches for performing host discovery suffer from a number of drawbacks. One such approach, known as packet-based discovery, involves programming the network devices in the network with flow rules that cause the devices to forward certain types of host-originated packets (e.g., ARP, ICMP, etc.) to the SDN controller. The SDN controller then receives these packets, decodes them, and determines host information from the decoded information. The problems with this approach are that (1) it requires the flow rules on each network device to be explicitly modified to send host-originated packets to the SDN controller, and (2) it requires the SDN controller to decode and process those packets, which incurs a performance overhead that increases proportionally with the number of hosts connected to the network. In deployments with a large number of hosts, such as large-scale virtualized data centers, this performance overhead can potentially render the SDN controller inoperable for carrying out other functions.
According to another existing host discovery approach, known as protocol-based discovery, the SDN controller proactively broadcasts discovery packets (e.g., ARP (Address Resolution Protocol) or NS (Network Solicitation) packets) to the network. The discovery packets are received at the hosts, which respond by transmitting ARP or NS response packets back to the SDN controller. The SDN controller then receives the response packets, decodes them, and determines host information from the decoded information. The main drawback of this approach is that, like packet-based discovery, the SDN controller must decode and process each response packet (one per host), which increases the load on the controller as the number of hosts increases. Further, the act of broadcasting the discovery packets through the network places an additional processing burden on the SDN controller and the network's constituent devices.